/**
 * @author PLO Pascal
 */
package edu.com.gestionstock.dao.bo;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import edu.com.gestionstock.dao.DAO;
import edu.com.gestionstock.bean.Livres;

public class LivresDAO extends DAO<Livres>
{

    public Livres find(int id)
    {
        Livres livre = new Livres();
        try
        {
            ResultSet result = this.connect
                    .createStatement(
                    ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_UPDATABLE).executeQuery(
                    "SELECT * FROM produitsLivres WHERE id = " + id);
            if ( result.first() )
            {
                livre.setId(id);
                livre.setQuantiteLoue(result.getInt("quantiteLoue"));
                livre.setQuantiteStock(result.getInt("quantiteStock"));
                livre.setAuteur(result.getString("Auteur"));
                livre.setTitre(result.getString("titre"));
            }
            System.out.println(livre.toString());

        } catch (SQLException e)
        {
            e.printStackTrace();
        }
        return livre;

    }

    @Override
    public Livres create(Livres obj)
    {
        try
        {
            PreparedStatement prepare = this.connect
                    .prepareStatement(
                    "INSERT INTO produitsLivres (quantiteloue, quantiteStock, Auteur, titre) "
                    + "VALUES( "
                    + obj.getQuantiteLoue() + ","
                    + obj.getQuantiteStock() + ",'"
                    + obj.getAuteur() + "','"
                    + obj.getTitre() + "');");
            prepare.executeUpdate();

            ResultSet result = this.connect
                    .createStatement()
                    .executeQuery("SELECT max(id) as id FROM produitsLivres;");
            result.first();
            obj.setId(result.getInt("id"));
        } catch (SQLException e)
        {
            e.printStackTrace();
        }
        return obj;
    }

    @Override
    public Livres update(Livres obj)
    {
        try
        {
            this.connect
                    .createStatement(
                    ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_UPDATABLE).executeUpdate(
                    "UPDATE produitsLivres SET quantiteloue = " + obj.getQuantiteLoue() + ", "
                    + "Auteur = '" + obj.getAuteur() + "', "
                    + "titre = '" + obj.getTitre() + "', "
                    + "quantiteStock = " + obj.getQuantiteStock()
                    + " WHERE id = " + obj.getId());

        } catch (SQLException e)
        {
            e.printStackTrace();
        }

        return obj;
    }

    @Override
    public void delete(Livres obj)
    {
        try
        {

            this.connect
                    .createStatement(
                    ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_UPDATABLE).executeUpdate(
                    "DELETE FROM produitsLivres WHERE id = " + obj.getId());

        } catch (SQLException e)
        {
            e.printStackTrace();
        }
    }

    @Override
    public ArrayList<Livres> findList(Livres obj)
    {
        ArrayList<Livres> arrLivres = new ArrayList<>();

        try
        {
            String query = "";
            if ( (!obj.getAuteur().equals("")) && (!obj.getTitre().equals("")) )
            {
                query = "select * from  produitsLivres  where Titre like ?  and Auteur like ?;";
            }
            if ( (!obj.getAuteur().equals("")) && (obj.getTitre().equals("")) )
            {
                query = "select * from  produitsLivres  where Auteur like ?;";
            }
            if ( (obj.getAuteur().equals("")) && (!obj.getTitre().equals("")) )
            {
                query = "select * from  produitsLivres  where Titre like ?;";
            }


            if ( query != "" )
            {
                PreparedStatement prepare = this.connect
                        .prepareStatement(query);

                if ( (!obj.getAuteur().equals("")) && (!obj.getTitre().equals("")) )
                {
                    prepare.setString(1, "%" + obj.getTitre() + "%");
                    prepare.setString(2, "%" + obj.getAuteur() + "%");
                }
                if ( (!obj.getAuteur().equals("")) && (obj.getTitre().equals("")) )
                {
                    prepare.setString(1, "%" + obj.getAuteur() + "%");

                }
                if ( (obj.getAuteur().equals("")) && (!obj.getTitre().equals("")) )
                {
                    prepare.setString(1, "%" + obj.getTitre() + "%");
                }

                ResultSet result = prepare.executeQuery();


                // System.out.println(prepare);							
                while ( result.next() )
                {
                    Livres livre = new Livres();
                    livre.setId(result.getInt("ID"));
                    livre.setTitre(result.getString("TITRE"));
                    livre.setAuteur(result.getString("AUTEUR"));
                    livre.setQuantiteLoue(result.getInt("QUANTITELOUE"));
                    livre.setQuantiteStock(result.getInt("QUANTITESTOCK"));
                    arrLivres.add(livre);
                    System.out.println(livre);
                }
            }

        } catch (SQLException e)
        {
            e.printStackTrace();
        }

        return arrLivres;
    }

    /**
     *
     */
    @Override
    public ArrayList<Livres> findList(String value)
    {
        ArrayList<Livres> arrLivres = new ArrayList<>();


        try
        {
            String query = "select * from  produitsLivres  where Titre like ?  or Auteur like ?;";
            PreparedStatement prepare = this.connect
                    .prepareStatement(query);
            prepare.setString(1, "%" + value + "%");
            prepare.setString(2, "%" + value + "%");
            ResultSet result = prepare.executeQuery();

            while ( result.next() )
            {
                Livres livre = new Livres();
                livre.setId(result.getInt("ID"));
                livre.setTitre(result.getString("TITRE"));
                livre.setAuteur(result.getString("AUTEUR"));
                livre.setQuantiteLoue(result.getInt("QUANTITELOUE"));
                livre.setQuantiteStock(result.getInt("QUANTITESTOCK"));
                arrLivres.add(livre);
                System.out.println(livre);
            }
        } catch (SQLException e)
        {
            e.printStackTrace();
        }

        return arrLivres;
    }

    /**
     * Truncate table livre
     *
     * @param void
     *
     */
    public void reset() throws SQLException
    {
        this.connect
                .createStatement().execute("truncate produitsLivres;");
    }
}
